package com.mingserve.common.core.utils;

import java.util.concurrent.*;

/**
 * 线程池工具类
 *
 * @author lvwshuai
 * @date 2023-03-08
 */
public class ThreadPoolUtils
{
    /**
     * 静态内部类单例，初始话线程池实列
     */
    private static class ThreadPoolHolder
    {
        //定义一个线程池，静态内部类单例方式
        private static final ExecutorService EXEC;

        static {
            /*
              实例化线程池
             */
            EXEC = new ThreadPoolExecutor(5, 10,
                    60L, TimeUnit.SECONDS,
                    // 一般不使用无边界的阻塞队列，内存有限
                    new ArrayBlockingQueue<>(100),
                    // 规定创建线程的标准
                    Executors.defaultThreadFactory(),
                    // 拒绝策略，一般最多使用CallerRunsPolicy()
                    new ThreadPoolExecutor.CallerRunsPolicy());
        }
    }

    /**
     * 执行线程任务
     * 5核心10线程
     *
     * @param command 一个需要执行的线程任务
     */
    public static void execute(Runnable command)
    {
        ThreadPoolHolder.EXEC.execute(command);
    }
}
